home *** CD-ROM | disk | FTP | other *** search
- Subject: v13i085: Sun RPC, release 3.9, Part08/15
- Newsgroups: comp.sources.unix
- Sender: sources
- Approved: rsalz@uunet.UU.NET
-
- Submitted-by: Stephen X. Nahm <sxn@Sun.COM>
- Posting-number: Volume 13, Issue 85
- Archive-name: rpc3.9/part08
-
- #! /bin/sh
- # This is a shell archive. To extract, remove the header and type "sh filename"
- #
- cd rpcgen
- echo x - rpc_svcout.c
- cat > rpc_svcout.c <<'Funky_Stuff'
- /* @(#)rpc_svcout.c 1.2 87/11/24 3.9 RPCSRC */
- /*
- * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
- * unrestricted use provided that this legend is included on all tape
- * media and as a part of the software program in whole or part. Users
- * may copy or modify Sun RPC without charge, but are not authorized
- * to license or distribute it to anyone else except as part of a product or
- * program developed by the user.
- *
- * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
- * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun RPC is provided with no support and without any obligation on the
- * part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California 94043
- */
- #ifndef lint
- static char sccsid[] = "@(#)rpc_svcout.c 1.6 87/06/24 (C) 1987 SMI";
- #endif
-
- /*
- * rpc_svcout.c, Server-skeleton outputter for the RPC protocol compiler
- * Copyright (C) 1987, Sun Microsytsems, Inc.
- */
- #include <stdio.h>
- #include <strings.h>
- #include "rpc_parse.h"
- #include "rpc_util.h"
-
- static char RQSTP[] = "rqstp";
- static char TRANSP[] = "transp";
- static char ARG[] = "argument";
- static char RESULT[] = "result";
- static char ROUTINE[] = "local";
-
-
- /*
- * write most of the service, that is, everything but the registrations.
- */
- void
- write_most()
- {
- list *l;
- definition *def;
- version_list *vp;
-
- for (l = defined; l != NULL; l = l->next) {
- def = (definition *) l->val;
- if (def->def_kind == DEF_PROGRAM) {
- for (vp = def->def.pr.versions; vp != NULL; vp = vp->next) {
- f_print(fout, "\nstatic void ");
- pvname(def->def_name, vp->vers_num);
- f_print(fout, "();");
- }
- }
- }
- f_print(fout, "\n\n");
- f_print(fout, "main()\n");
- f_print(fout, "{\n");
- f_print(fout, "\tSVCXPRT *%s;\n", TRANSP);
- f_print(fout, "\n");
- for (l = defined; l != NULL; l = l->next) {
- def = (definition *) l->val;
- if (def->def_kind != DEF_PROGRAM) {
- continue;
- }
- for (vp = def->def.pr.versions; vp != NULL; vp = vp->next) {
- f_print(fout, "\tpmap_unset(%s, %s);\n", def->def_name, vp->vers_name);
- }
- }
- }
-
-
- /*
- * write a registration for the given transport
- */
- void
- write_register(transp)
- char *transp;
- {
- list *l;
- definition *def;
- version_list *vp;
-
- f_print(fout, "\n");
- f_print(fout, "\t%s = svc%s_create(RPC_ANYSOCK", TRANSP, transp);
- if (streq(transp, "tcp")) {
- f_print(fout, ", 0, 0");
- }
- f_print(fout, ");\n");
- f_print(fout, "\tif (%s == NULL) {\n", TRANSP);
- f_print(fout, "\t\tfprintf(stderr, \"cannot create %s service.\\n\");\n", transp);
- f_print(fout, "\t\texit(1);\n");
- f_print(fout, "\t}\n");
-
- for (l = defined; l != NULL; l = l->next) {
- def = (definition *) l->val;
- if (def->def_kind != DEF_PROGRAM) {
- continue;
- }
- for (vp = def->def.pr.versions; vp != NULL; vp = vp->next) {
- f_print(fout,
- "\tif (!svc_register(%s, %s, %s, ",
- TRANSP, def->def_name, vp->vers_name);
- pvname(def->def_name, vp->vers_num);
- f_print(fout, ", IPPROTO_%s)) {\n",
- streq(transp, "udp") ? "UDP" : "TCP");
- f_print(fout,
- "\t\tfprintf(stderr, \"unable to register (%s, %s, %s).\\n\");\n",
- def->def_name, vp->vers_name, transp);
- f_print(fout, "\t\texit(1);\n");
- f_print(fout, "\t}\n");
- }
- }
- }
-
-
- /*
- * write the rest of the service
- */
- void
- write_rest()
- {
- f_print(fout, "\tsvc_run();\n");
- f_print(fout, "\tfprintf(stderr, \"svc_run returned\\n\");\n");
- f_print(fout, "\texit(1);\n");
- f_print(fout, "}\n");
- }
-
- void
- write_programs(storage)
- char *storage;
- {
- list *l;
- definition *def;
-
- for (l = defined; l != NULL; l = l->next) {
- def = (definition *) l->val;
- if (def->def_kind == DEF_PROGRAM) {
- write_program(def, storage);
- }
- }
- }
-
-
- static
- write_program(def, storage)
- definition *def;
- char *storage;
- {
- version_list *vp;
- proc_list *proc;
- int filled;
-
- for (vp = def->def.pr.versions; vp != NULL; vp = vp->next) {
- f_print(fout, "\n");
- if (storage != NULL) {
- f_print(fout, "%s ", storage);
- }
- f_print(fout, "void\n");
- pvname(def->def_name, vp->vers_num);
- f_print(fout, "(%s, %s)\n", RQSTP, TRANSP);
- f_print(fout, " struct svc_req *%s;\n", RQSTP);
- f_print(fout, " SVCXPRT *%s;\n", TRANSP);
- f_print(fout, "{\n");
-
- filled = 0;
- f_print(fout, "\tunion {\n");
- for (proc = vp->procs; proc != NULL; proc = proc->next) {
- if (streq(proc->arg_type, "void")) {
- continue;
- }
- filled = 1;
- f_print(fout, "\t\t");
- ptype(proc->arg_prefix, proc->arg_type, 0);
- pvname(proc->proc_name, vp->vers_num);
- f_print(fout, "_arg;\n");
- }
- if (!filled) {
- f_print(fout, "\t\tint fill;\n");
- }
- f_print(fout, "\t} %s;\n", ARG);
- f_print(fout, "\tchar *%s;\n", RESULT);
- f_print(fout, "\tbool_t (*xdr_%s)(), (*xdr_%s)();\n", ARG, RESULT);
- f_print(fout, "\tchar *(*%s)();\n", ROUTINE);
- f_print(fout, "\n");
- f_print(fout, "\tswitch (%s->rq_proc) {\n", RQSTP);
-
- if (!nullproc(vp->procs)) {
- f_print(fout, "\tcase NULLPROC:\n");
- f_print(fout, "\t\tsvc_sendreply(%s, xdr_void, NULL);\n", TRANSP);
- f_print(fout, "\t\treturn;\n\n");
- }
- for (proc = vp->procs; proc != NULL; proc = proc->next) {
- f_print(fout, "\tcase %s:\n", proc->proc_name);
- f_print(fout, "\t\txdr_%s = xdr_%s;\n", ARG,
- stringfix(proc->arg_type));
- f_print(fout, "\t\txdr_%s = xdr_%s;\n", RESULT,
- stringfix(proc->res_type));
- f_print(fout, "\t\t%s = (char *(*)()) ", ROUTINE);
- pvname(proc->proc_name, vp->vers_num);
- f_print(fout, ";\n");
- f_print(fout, "\t\tbreak;\n\n");
- }
- f_print(fout, "\tdefault:\n");
- printerr("noproc", TRANSP);
- f_print(fout, "\t\treturn;\n");
- f_print(fout, "\t}\n");
-
- f_print(fout, "\tbzero(&%s, sizeof(%s));\n", ARG, ARG);
- printif("getargs", TRANSP, "&", ARG);
- printerr("decode", TRANSP);
- f_print(fout, "\t\treturn;\n");
- f_print(fout, "\t}\n");
-
- f_print(fout, "\t%s = (*%s)(&%s, %s);\n", RESULT, ROUTINE, ARG,
- RQSTP);
- f_print(fout,
- "\tif (%s != NULL && !svc_sendreply(%s, xdr_%s, %s)) {\n",
- RESULT, TRANSP, RESULT, RESULT);
- printerr("systemerr", TRANSP);
- f_print(fout, "\t}\n");
-
- printif("freeargs", TRANSP, "&", ARG);
- f_print(fout, "\t\tfprintf(stderr, \"unable to free arguments\\n\");\n");
- f_print(fout, "\t\texit(1);\n");
- f_print(fout, "\t}\n");
-
- f_print(fout, "}\n\n");
- }
- }
-
- static
- printerr(err, transp)
- char *err;
- char *transp;
- {
- f_print(fout, "\t\tsvcerr_%s(%s);\n", err, transp);
- }
-
- static
- printif(proc, transp, prefix, arg)
- char *proc;
- char *transp;
- char *prefix;
- char *arg;
- {
- f_print(fout, "\tif (!svc_%s(%s, xdr_%s, %s%s)) {\n",
- proc, transp, arg, prefix, arg);
- }
-
-
- nullproc(proc)
- proc_list *proc;
- {
- for (; proc != NULL; proc = proc->next) {
- if (streq(proc->proc_num, "0")) {
- return (1);
- }
- }
- return (0);
- }
- Funky_Stuff
- len=`wc -c < rpc_svcout.c`
- if [ $len != 7245 ] ; then
- echo error: rpc_svcout.c was $len bytes long, should have been 7245
- fi
- echo x - rpc_util.c
- cat > rpc_util.c <<'Funky_Stuff'
- /* @(#)rpc_util.c 1.2 87/11/24 3.9 RPCSRC */
- /*
- * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
- * unrestricted use provided that this legend is included on all tape
- * media and as a part of the software program in whole or part. Users
- * may copy or modify Sun RPC without charge, but are not authorized
- * to license or distribute it to anyone else except as part of a product or
- * program developed by the user.
- *
- * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
- * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun RPC is provided with no support and without any obligation on the
- * part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California 94043
- */
- #ifndef lint
- static char sccsid[] = "@(#)rpc_util.c 1.5 87/06/24 (C) 1987 SMI";
- #endif
-
- /*
- * rpc_util.c, Utility routines for the RPC protocol compiler
- * Copyright (C) 1987, Sun Microsystems, Inc.
- */
- #include <stdio.h>
- #include "rpc_scan.h"
- #include "rpc_parse.h"
- #include "rpc_util.h"
-
- char curline[MAXLINESIZE]; /* current read line */
- char *where = curline; /* current point in line */
- int linenum = 0; /* current line number */
-
- char *infilename; /* input filename */
-
- #define NFILES 4
- char *outfiles[NFILES]; /* output file names */
- int nfiles;
-
- FILE *fout; /* file pointer of current output */
- FILE *fin; /* file pointer of current input */
-
- list *defined; /* list of defined things */
-
- /*
- * Reinitialize the world
- */
- reinitialize()
- {
- bzero(curline, MAXLINESIZE);
- where = curline;
- linenum = 0;
- defined = NULL;
- }
-
- /*
- * string equality
- */
- streq(a, b)
- char *a;
- char *b;
- {
- return (strcmp(a, b) == 0);
- }
-
- /*
- * find a value in a list
- */
- char *
- findval(lst, val, cmp)
- list *lst;
- char *val;
- int (*cmp) ();
-
- {
- for (; lst != NULL; lst = lst->next) {
- if ((*cmp) (lst->val, val)) {
- return (lst->val);
- }
- }
- return (NULL);
- }
-
- /*
- * store a value in a list
- */
- void
- storeval(lstp, val)
- list **lstp;
- char *val;
- {
- list **l;
- list *lst;
-
- for (l = lstp; *l != NULL; l = (list **) & (*l)->next);
- lst = ALLOC(list);
- lst->val = val;
- lst->next = NULL;
- *l = lst;
- }
-
-
- static
- findit(def, type)
- definition *def;
- char *type;
- {
- return (streq(def->def_name, type));
- }
-
-
- static char *
- fixit(type, orig)
- char *type;
- char *orig;
- {
- definition *def;
-
- def = (definition *) FINDVAL(defined, type, findit);
- if (def == NULL || def->def_kind != DEF_TYPEDEF) {
- return (orig);
- }
- switch (def->def.ty.rel) {
- case REL_VECTOR:
- return (def->def.ty.old_type);
- case REL_ALIAS:
- return (fixit(def->def.ty.old_type, orig));
- default:
- return (orig);
- }
- }
-
- char *
- fixtype(type)
- char *type;
- {
- return (fixit(type, type));
- }
-
- char *
- stringfix(type)
- char *type;
- {
- if (streq(type, "string")) {
- return ("wrapstring");
- } else {
- return (type);
- }
- }
-
- void
- ptype(prefix, type, follow)
- char *prefix;
- char *type;
- int follow;
- {
- if (prefix != NULL) {
- if (streq(prefix, "enum")) {
- f_print(fout, "enum ");
- } else {
- f_print(fout, "struct ");
- }
- }
- if (streq(type, "bool")) {
- f_print(fout, "bool_t ");
- } else if (streq(type, "string")) {
- f_print(fout, "char *");
- } else {
- f_print(fout, "%s ", follow ? fixtype(type) : type);
- }
- }
-
-
- static
- typedefed(def, type)
- definition *def;
- char *type;
- {
- if (def->def_kind != DEF_TYPEDEF || def->def.ty.old_prefix != NULL) {
- return (0);
- } else {
- return (streq(def->def_name, type));
- }
- }
-
- isvectordef(type, rel)
- char *type;
- relation rel;
- {
- definition *def;
-
- for (;;) {
- switch (rel) {
- case REL_VECTOR:
- return (!streq(type, "string"));
- case REL_ARRAY:
- return (0);
- case REL_POINTER:
- return (0);
- case REL_ALIAS:
- def = (definition *) FINDVAL(defined, type, typedefed);
- if (def == NULL) {
- return (0);
- }
- type = def->def.ty.old_type;
- rel = def->def.ty.rel;
- }
- }
- }
-
-
- static char *
- locase(str)
- char *str;
- {
- char c;
- static char buf[100];
- char *p = buf;
-
- while (c = *str++) {
- *p++ = (c >= 'A' && c <= 'Z') ? (c - 'A' + 'a') : c;
- }
- *p = 0;
- return (buf);
- }
-
-
- void
- pvname(pname, vnum)
- char *pname;
- char *vnum;
- {
- f_print(fout, "%s_%s", locase(pname), vnum);
- }
-
-
- /*
- * print a useful (?) error message, and then die
- */
- void
- error(msg)
- char *msg;
- {
- printwhere();
- f_print(stderr, "%s, line %d: ", infilename, linenum);
- f_print(stderr, "%s\n", msg);
- crash();
- }
-
- /*
- * Something went wrong, unlink any files that we may have created and then
- * die.
- */
- crash()
- {
- int i;
-
- for (i = 0; i < nfiles; i++) {
- (void) unlink(outfiles[i]);
- }
- exit(1);
- }
-
-
- void
- record_open(file)
- char *file;
- {
- if (nfiles < NFILES) {
- outfiles[nfiles++] = file;
- } else {
- f_print(stderr, "too many files!\n");
- crash();
- }
- }
-
- static char expectbuf[100];
- static char *toktostr();
-
- /*
- * error, token encountered was not the expected one
- */
- void
- expected1(exp1)
- tok_kind exp1;
- {
- s_print(expectbuf, "expected '%s'",
- toktostr(exp1));
- error(expectbuf);
- }
-
- /*
- * error, token encountered was not one of two expected ones
- */
- void
- expected2(exp1, exp2)
- tok_kind exp1, exp2;
- {
- s_print(expectbuf, "expected '%s' or '%s'",
- toktostr(exp1),
- toktostr(exp2));
- error(expectbuf);
- }
-
- /*
- * error, token encountered was not one of 3 expected ones
- */
- void
- expected3(exp1, exp2, exp3)
- tok_kind exp1, exp2, exp3;
- {
- s_print(expectbuf, "expected '%s', '%s' or '%s'",
- toktostr(exp1),
- toktostr(exp2),
- toktostr(exp3));
- error(expectbuf);
- }
-
- void
- tabify(f, tab)
- FILE *f;
- int tab;
- {
- while (tab--) {
- (void) fputc('\t', f);
- }
- }
-
-
-
- static token tokstrings[] = {
- {TOK_IDENT, "identifier"},
- {TOK_CONST, "const"},
- {TOK_RPAREN, ")"},
- {TOK_LPAREN, "("},
- {TOK_RBRACE, "}"},
- {TOK_LBRACE, "{"},
- {TOK_LBRACKET, "["},
- {TOK_RBRACKET, "]"},
- {TOK_STAR, "*"},
- {TOK_COMMA, ","},
- {TOK_EQUAL, "="},
- {TOK_COLON, ":"},
- {TOK_SEMICOLON, ";"},
- {TOK_UNION, "union"},
- {TOK_STRUCT, "struct"},
- {TOK_SWITCH, "switch"},
- {TOK_CASE, "case"},
- {TOK_DEFAULT, "default"},
- {TOK_ENUM, "enum"},
- {TOK_TYPEDEF, "typedef"},
- {TOK_INT, "int"},
- {TOK_SHORT, "short"},
- {TOK_LONG, "long"},
- {TOK_UNSIGNED, "unsigned"},
- {TOK_DOUBLE, "double"},
- {TOK_FLOAT, "float"},
- {TOK_CHAR, "char"},
- {TOK_STRING, "string"},
- {TOK_OPAQUE, "opaque"},
- {TOK_BOOL, "bool"},
- {TOK_VOID, "void"},
- {TOK_PROGRAM, "program"},
- {TOK_VERSION, "version"},
- {TOK_EOF, "??????"}
- };
-
- static char *
- toktostr(kind)
- tok_kind kind;
- {
- token *sp;
-
- for (sp = tokstrings; sp->kind != TOK_EOF && sp->kind != kind; sp++);
- return (sp->str);
- }
-
-
-
- static
- printbuf()
- {
- char c;
- int i;
- int cnt;
-
- # define TABSIZE 4
-
- for (i = 0; c = curline[i]; i++) {
- if (c == '\t') {
- cnt = 8 - (i % TABSIZE);
- c = ' ';
- } else {
- cnt = 1;
- }
- while (cnt--) {
- (void) fputc(c, stderr);
- }
- }
- }
-
-
- static
- printwhere()
- {
- int i;
- char c;
- int cnt;
-
- printbuf();
- for (i = 0; i < where - curline; i++) {
- c = curline[i];
- if (c == '\t') {
- cnt = 8 - (i % TABSIZE);
- } else {
- cnt = 1;
- }
- while (cnt--) {
- (void) fputc('^', stderr);
- }
- }
- (void) fputc('\n', stderr);
- }
- Funky_Stuff
- len=`wc -c < rpc_util.c`
- if [ $len != 7773 ] ; then
- echo error: rpc_util.c was $len bytes long, should have been 7773
- fi
- echo x - rpc_util.h
- cat > rpc_util.h <<'Funky_Stuff'
- /* @(#)rpc_util.h 1.2 87/11/24 3.9 RPCSRC */
- /*
- * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
- * unrestricted use provided that this legend is included on all tape
- * media and as a part of the software program in whole or part. Users
- * may copy or modify Sun RPC without charge, but are not authorized
- * to license or distribute it to anyone else except as part of a product or
- * program developed by the user.
- *
- * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
- * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun RPC is provided with no support and without any obligation on the
- * part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California 94043
- */
- /* @(#)rpc_util.h 1.6 87/06/24 (C) 1987 SMI */
-
- /*
- * rpc_util.h, Useful definitions for the RPC protocol compiler
- * Copyright (C) 1987, Sun Microsystems, Inc.
- */
- extern char *malloc();
-
- #define alloc(size) malloc((unsigned)(size))
- #define ALLOC(object) (object *) malloc(sizeof(object))
-
- extern char *sprintf();
-
- #define s_print (void) sprintf
- #define f_print (void) fprintf
-
- struct list {
- char *val;
- struct list *next;
- };
- typedef struct list list;
-
- /*
- * Global variables
- */
- #define MAXLINESIZE 1024
- extern char curline[MAXLINESIZE];
- extern char *where;
- extern int linenum;
-
- extern char *infilename;
- extern FILE *fout;
- extern FILE *fin;
-
- extern list *defined;
-
- /*
- * rpc_util routines
- */
- void storeval();
-
- #define STOREVAL(list,item) \
- storeval(list,(char *)item)
-
- char *findval();
-
- #define FINDVAL(list,item,finder) \
- findval(list, (char *) item, finder)
-
- char *fixtype();
- char *stringfix();
- void pvname();
- void ptype();
- int isvectordef();
- int streq();
- void error();
- void expected1();
- void expected2();
- void expected3();
- void tabify();
- void record_open();
-
- /*
- * rpc_cout routines
- */
- void cprint();
- void emit();
-
- /*
- * rpc_hout routines
- */
- void print_datadef();
-
- /*
- * rpc_svcout routines
- */
- void write_most();
- void write_register();
- void write_rest();
- void write_programs();
-
- /*
- * rpc_clntout routines
- */
- void write_stubs();
- Funky_Stuff
- len=`wc -c < rpc_util.h`
- if [ $len != 2666 ] ; then
- echo error: rpc_util.h was $len bytes long, should have been 2666
- fi
- cd ..
- echo done with directory rpcgen
- echo x - rpcsvc
- echo creating directory rpcsvc
- mkdir rpcsvc
- cd rpcsvc
- echo x - Makefile
- cat > Makefile <<'Funky_Stuff'
- #
- # @(#)Makefile 1.6 87/11/30 3.9 RPCSRC
- #
- #
- RPCCOM = rpcgen
- LIB = -lrpclib
-
- DESTDIR=
-
- HDRS= klm_prot.h mount.h nfs_prot.h nlm_prot.h rex.h rquota.h rnusers.h\
- rquota.h rstat.h sm_inter.h spray.h yppasswd.h yp.h
- XFILES= bootparam_prot.x klm_prot.x mount.x nfs_prot.x nlm_prot.x \
- rex.x rnusers.x rquota.x rstat.x sm_inter.x spray.x yppasswd.x yp.x
- BIN= rstat_svc
- GEN= rstat_svc.c rstat_xdr.c
-
- all: $(HDRS) $(BIN)
-
- install: $(HDRS) $(XFILES)
- @echo "Creating RPC service headers directory"
- -mkdir ${DESTDIR}/usr/include/rpcsvc && \
- chown bin ${DESTDIR}/usr/include/rpcsvc && \
- chmod 755 ${DESTDIR}/usr/include/rpcsvc
- @echo "Installing RPC service header and definition files"
- for i in $(HDRS) $(XFILES); do \
- (install -c -m 644 $$i ${DESTDIR}/usr/include/rpcsvc) done
- -mkdir ${DESTDIR}/etc && chown bin ${DESTDIR}/etc && \
- chmod 755 ${DESTDIR}/etc
- @echo "Installing RPC services in ${DESTDIR}/etc"
- @set -x;for i in ${BIN}; do \
- (install -c -s $$i ${DESTDIR}/etc/$$i); done
-
- rstat_svc: rstat_proc.o rstat_svc.o rstat_xdr.o
- $(CC) $(LDFLAGS) -o $@ rstat_proc.o rstat_svc.o rstat_xdr.o $(LIB)
-
- rstat_proc.c: rstat.h
-
- klm_prot.h:
- $(RPCCOM) -h klm_prot.x -o $@
- mount.h:
- $(RPCCOM) -h mount.x -o $@
- nfs_prot.h:
- $(RPCCOM) -h nfs_prot.x -o $@
- nlm_prot.h:
- $(RPCCOM) -h nlm_prot.x -o $@
- rex.h:
- $(RPCCOM) -h rex.x -o $@
- rnusers.h:
- $(RPCCOM) -h rnusers.x -o $@
- rquota.h:
- $(RPCCOM) -h rquota.x -o $@
- rstat.h:
- $(RPCCOM) -h rstat.x -o $@
- sm_inter.h:
- $(RPCCOM) -h sm_inter.x -o $@
- spray.h:
- $(RPCCOM) -h spray.x -o $@
- yp.h:
- $(RPCCOM) -h yp.x -o $@
- yppasswd.h:
- $(RPCCOM) -h yppasswd.x -o $@
-
- rstat_svc.c: rstat.x
- $(RPCCOM) -s udp rstat.x -o $@
- rstat_xdr.c: rstat.x
- $(RPCCOM) -c rstat.x -o $@
-
- clean cleanup:
- rm -f *.o $(GEN) $(BIN)
- Funky_Stuff
- len=`wc -c < Makefile`
- if [ $len != 1755 ] ; then
- echo error: Makefile was $len bytes long, should have been 1755
- fi
- echo x - bootparam_prot.x
- cat > bootparam_prot.x <<'Funky_Stuff'
- /* @(#)bootparam_prot.x 1.2 87/11/12 3.9 RPCSRC */
- /* @(#)bootparam_prot.x 1.2 87/06/24 Copyr 1987 Sun Micro */
-
- /*
- * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
- * unrestricted use provided that this legend is included on all tape
- * media and as a part of the software program in whole or part. Users
- * may copy or modify Sun RPC without charge, but are not authorized
- * to license or distribute it to anyone else except as part of a product or
- * program developed by the user.
- *
- * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
- * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun RPC is provided with no support and without any obligation on the
- * part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California 94043
- */
-
- /*
- * RPC for bootparms service.
- * There are two procedures:
- * WHOAMI takes a net address and returns a client name and also a
- * likely net address for routing
- * GETFILE takes a client name and file identifier and returns the
- * server name, server net address and pathname for the file.
- * file identifiers typically include root, swap, pub and dump
- */
-
- #ifdef RPC_HDR
- %#include <rpc/types.h>
- %#include <sys/time.h>
- %#include <sys/errno.h>
- %#include <nfs/nfs.h>
- #endif
-
- const MAX_MACHINE_NAME = 255;
- const MAX_PATH_LEN = 1024;
- const MAX_FILEID = 32;
- const IP_ADDR_TYPE = 1;
-
- typedef string bp_machine_name_t<MAX_MACHINE_NAME>;
- typedef string bp_path_t<MAX_PATH_LEN>;
- typedef string bp_fileid_t<MAX_FILEID>;
-
- struct ip_addr_t {
- char net;
- char host;
- char lh;
- char impno;
- };
-
- union bp_address switch (int address_type) {
- case IP_ADDR_TYPE:
- ip_addr_t ip_addr;
- };
-
- struct bp_whoami_arg {
- bp_address client_address;
- };
-
- struct bp_whoami_res {
- bp_machine_name_t client_name;
- bp_machine_name_t domain_name;
- bp_address router_address;
- };
-
- struct bp_getfile_arg {
- bp_machine_name_t client_name;
- bp_fileid_t file_id;
- };
-
- struct bp_getfile_res {
- bp_machine_name_t server_name;
- bp_address server_address;
- bp_path_t server_path;
- };
-
- program BOOTPARAMPROG {
- version BOOTPARAMVERS {
- bp_whoami_res BOOTPARAMPROC_WHOAMI(bp_whoami_arg) = 1;
- bp_getfile_res BOOTPARAMPROC_GETFILE(bp_getfile_arg) = 2;
- } = 1;
- } = 100026;
- Funky_Stuff
- len=`wc -c < bootparam_prot.x`
- if [ $len != 2823 ] ; then
- echo error: bootparam_prot.x was $len bytes long, should have been 2823
- fi
- echo x - klm_prot.x
- cat > klm_prot.x <<'Funky_Stuff'
- /* @(#)klm_prot.x 1.2 87/11/12 3.9 RPCSRC */
- /* @(#)klm_prot.x 1.7 87/07/08 Copyr 1987 Sun Micro */
-
- /*
- * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
- * unrestricted use provided that this legend is included on all tape
- * media and as a part of the software program in whole or part. Users
- * may copy or modify Sun RPC without charge, but are not authorized
- * to license or distribute it to anyone else except as part of a product or
- * program developed by the user.
- *
- * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
- * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun RPC is provided with no support and without any obligation on the
- * part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California 94043
- */
-
- /*
- * Kernel/lock manager protocol definition
- * Copyright (C) 1986 Sun Microsystems, Inc.
- *
- * protocol used between the UNIX kernel (the "client") and the
- * local lock manager. The local lock manager is a deamon running
- * above the kernel.
- */
- program KLM_PROG {
- version KLM_VERS {
-
- klm_testrply KLM_TEST (struct klm_testargs) = 1;
-
- klm_stat KLM_LOCK (struct klm_lockargs) = 2;
-
- klm_stat KLM_CANCEL (struct klm_lockargs) = 3;
- /* klm_granted=> the cancel request fails due to lock is already granted */
- /* klm_denied=> the cancel request successfully aborts
- lock request */
-
- klm_stat KLM_UNLOCK (struct klm_unlockargs) = 4;
- } = 1;
- } = 100020;
-
- const LM_MAXSTRLEN = 1024;
-
- /*
- * lock manager status returns
- */
- enum klm_stats {
- klm_granted = 0, /* lock is granted */
- klm_denied = 1, /* lock is denied */
- klm_denied_nolocks = 2, /* no lock entry available */
- klm_working = 3 /* lock is being processed */
- };
-
- /*
- * lock manager lock identifier
- */
- struct klm_lock {
- string server_name<LM_MAXSTRLEN>;
- netobj fh; /* a counted file handle */
- int pid; /* holder of the lock */
- unsigned l_offset; /* beginning offset of the lock */
- unsigned l_len; /* byte length of the lock;
- * zero means through end of file */
- };
-
- /*
- * lock holder identifier
- */
- struct klm_holder {
- bool exclusive; /* FALSE if shared lock */
- int svid; /* holder of the lock (pid) */
- unsigned l_offset; /* beginning offset of the lock */
- unsigned l_len; /* byte length of the lock;
- * zero means through end of file */
- };
-
- /*
- * reply to KLM_LOCK / KLM_UNLOCK / KLM_CANCEL
- */
- struct klm_stat {
- klm_stats stat;
- };
-
- /*
- * reply to a KLM_TEST call
- */
- union klm_testrply switch (klm_stats stat) {
- case klm_denied:
- struct klm_holder holder;
- default: /* All other cases return no arguments */
- void;
- };
-
-
- /*
- * arguments to KLM_LOCK
- */
- struct klm_lockargs {
- bool block;
- bool exclusive;
- struct klm_lock alock;
- };
-
- /*
- * arguments to KLM_TEST
- */
- struct klm_testargs {
- bool exclusive;
- struct klm_lock alock;
- };
-
- /*
- * arguments to KLM_UNLOCK
- */
- struct klm_unlockargs {
- struct klm_lock alock;
- };
- Funky_Stuff
- len=`wc -c < klm_prot.x`
- if [ $len != 3486 ] ; then
- echo error: klm_prot.x was $len bytes long, should have been 3486
- fi
- echo x - mount.x
- cat > mount.x <<'Funky_Stuff'
- /* @(#)mount.x 1.2 87/11/12 3.9 RPCSRC */
- /* @(#)mount.x 1.2 87/09/18 Copyr 1987 Sun Micro */
-
- /*
- * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
- * unrestricted use provided that this legend is included on all tape
- * media and as a part of the software program in whole or part. Users
- * may copy or modify Sun RPC without charge, but are not authorized
- * to license or distribute it to anyone else except as part of a product or
- * program developed by the user.
- *
- * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
- * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun RPC is provided with no support and without any obligation on the
- * part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California 94043
- */
-
- /*
- * Protocol description for the mount program
- */
-
-
- const MNTPATHLEN = 1024; /* maximum bytes in a pathname argument */
- const MNTNAMLEN = 255; /* maximum bytes in a name argument */
- const FHSIZE = 32; /* size in bytes of a file handle */
-
- /*
- * The fhandle is the file handle that the server passes to the client.
- * All file operations are done using the file handles to refer to a file
- * or a directory. The file handle can contain whatever information the
- * server needs to distinguish an individual file.
- */
- typedef opaque fhandle<FHSIZE>;
-
- /*
- * If a status of zero is returned, the call completed successfully, and
- * a file handle for the directory follows. A non-zero status indicates
- * some sort of error. The status corresponds with UNIX error numbers.
- */
- union fhstatus switch (unsigned fhs_status) {
- case 0:
- fhandle fhs_fhandle;
- default:
- void;
- };
-
- /*
- * The type dirpath is the pathname of a directory
- */
- typedef string dirpath<MNTPATHLEN>;
-
- /*
- * The type name is used for arbitrary names (hostnames, groupnames)
- */
- typedef string name<MNTNAMLEN>;
-
- /*
- * A list of who has what mounted
- */
- struct mountlist {
- name ml_hostname;
- dirpath ml_directory;
- mountlist *ml_next;
- };
-
- /*
- * A list of netgroups
- */
- typedef struct groupnode *groups;
- struct groupnode {
- name gr_name;
- groups *gr_next;
- };
-
- /*
- * A list of what is exported and to whom
- */
- struct exports {
- dirpath ex_dir;
- groups ex_groups;
- exports *ex_next;
- };
-
- program MOUNTPROG {
- /*
- * Version one of the mount protocol communicates with version two
- * of the NFS protocol. The only connecting point is the fhandle
- * structure, which is the same for both protocols.
- */
- version MOUNTVERS {
- /*
- * Does no work. It is made available in all RPC services
- * to allow server reponse testing and timing
- */
- void
- MOUNTPROC_NULL(void) = 0;
-
- /*
- * If fhs_status is 0, then fhs_fhandle contains the
- * file handle for the directory. This file handle may
- * be used in the NFS protocol. This procedure also adds
- * a new entry to the mount list for this client mounting
- * the directory.
- * Unix authentication required.
- */
- fhstatus
- MOUNTPROC_MNT(dirpath) = 1;
-
- /*
- * Returns the list of remotely mounted filesystems. The
- * mountlist contains one entry for each hostname and
- * directory pair.
- */
- mountlist
- MOUNTPROC_DUMP(void) = 2;
-
- /*
- * Removes the mount list entry for the directory
- * Unix authentication required.
- */
- void
- MOUNTPROC_UMNT(dirpath) = 3;
-
- /*
- * Removes all of the mount list entries for this client
- * Unix authentication required.
- */
- void
- MOUNTPROC_UMNTALL(void) = 4;
-
- /*
- * Returns a list of all the exported filesystems, and which
- * machines are allowed to import it.
- */
- exports
- MOUNTPROC_EXPORT(void) = 5;
-
- /*
- * Identical to MOUNTPROC_EXPORT above
- */
- exports
- MOUNTPROC_EXPORTALL(void) = 6;
- } = 1;
- } = 100005;
- Funky_Stuff
- len=`wc -c < mount.x`
- if [ $len != 4293 ] ; then
- echo error: mount.x was $len bytes long, should have been 4293
- fi
- echo x - nfs_prot.x
- cat > nfs_prot.x <<'Funky_Stuff'
- /* @(#)nfs_prot.x 1.2 87/11/12 3.9 RPCSRC */
-
- /*
- * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
- * unrestricted use provided that this legend is included on all tape
- * media and as a part of the software program in whole or part. Users
- * may copy or modify Sun RPC without charge, but are not authorized
- * to license or distribute it to anyone else except as part of a product or
- * program developed by the user.
- *
- * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
- * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun RPC is provided with no support and without any obligation on the
- * part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California 94043
- */
-
- /*
- * nfs_prot.x 1.2 87/10/12
- * Copyright 1987 Sun Microsystems, Inc.
- */
- const NFS_PORT = 2049;
- const NFS_MAXDATA = 8192;
- const NFS_MAXPATHLEN = 1024;
- const NFS_MAXNAMLEN = 255;
- const NFS_FHSIZE = 32;
- const NFS_COOKIESIZE = 4;
- const NFS_FIFO_DEV = -1; /* size kludge for named pipes */
-
- /*
- * File types
- */
- const NFSMODE_FMT = 0170000; /* type of file */
- const NFSMODE_DIR = 0040000; /* directory */
- const NFSMODE_CHR = 0020000; /* character special */
- const NFSMODE_BLK = 0060000; /* block special */
- const NFSMODE_REG = 0100000; /* regular */
- const NFSMODE_LNK = 0120000; /* symbolic link */
- const NFSMODE_SOCK = 0140000; /* socket */
- const NFSMODE_FIFO = 0010000; /* fifo */
-
- /*
- * Error status
- */
- enum nfsstat {
- NFS_OK= 0, /* no error */
- NFSERR_PERM=1, /* Not owner */
- NFSERR_NOENT=2, /* No such file or directory */
- NFSERR_IO=5, /* I/O error */
- NFSERR_NXIO=6, /* No such device or address */
- NFSERR_ACCES=13, /* Permission denied */
- NFSERR_EXIST=17, /* File exists */
- NFSERR_NODEV=19, /* No such device */
- NFSERR_NOTDIR=20, /* Not a directory*/
- NFSERR_ISDIR=21, /* Is a directory */
- NFSERR_FBIG=27, /* File too large */
- NFSERR_NOSPC=28, /* No space left on device */
- NFSERR_ROFS=30, /* Read-only file system */
- NFSERR_NAMETOOLONG=63, /* File name too long */
- NFSERR_NOTEMPTY=66, /* Directory not empty */
- NFSERR_DQUOT=69, /* Disc quota exceeded */
- NFSERR_STALE=70, /* Stale NFS file handle */
- NFSERR_WFLUSH=99 /* write cache flushed */
- };
-
- /*
- * File types
- */
- enum ftype {
- NFNON = 0, /* non-file */
- NFREG = 1, /* regular file */
- NFDIR = 2, /* directory */
- NFBLK = 3, /* block special */
- NFCHR = 4, /* character special */
- NFLNK = 5, /* symbolic link */
- NFSOCK = 6, /* unix domain sockets */
- NFBAD = 7, /* unused */
- NFFIFO = 8 /* named pipe */
- };
-
- /*
- * File access handle
- */
- struct nfs_fh {
- opaque data[NFS_FHSIZE];
- };
-
- /*
- * Timeval
- */
- struct nfstime {
- unsigned seconds;
- unsigned useconds;
- };
-
-
- /*
- * File attributes
- */
- struct fattr {
- ftype type; /* file type */
- unsigned mode; /* protection mode bits */
- unsigned nlink; /* # hard links */
- unsigned uid; /* owner user id */
- unsigned gid; /* owner group id */
- unsigned size; /* file size in bytes */
- unsigned blocksize; /* prefered block size */
- unsigned rdev; /* special device # */
- unsigned blocks; /* Kb of disk used by file */
- unsigned fsid; /* device # */
- unsigned fileid; /* inode # */
- nfstime atime; /* time of last access */
- nfstime mtime; /* time of last modification */
- nfstime ctime; /* time of last change */
- };
-
- /*
- * File attributes which can be set
- */
- struct sattr {
- unsigned mode; /* protection mode bits */
- unsigned uid; /* owner user id */
- unsigned gid; /* owner group id */
- unsigned size; /* file size in bytes */
- nfstime atime; /* time of last access */
- nfstime mtime; /* time of last modification */
- };
-
-
- typedef string filename<NFS_MAXNAMLEN>;
- typedef string nfspath<NFS_MAXPATHLEN>;
-
- /*
- * Reply status with file attributes
- */
- union attrstat switch (nfsstat status) {
- case NFS_OK:
- fattr attributes;
- default:
- void;
- };
-
- struct sattrargs {
- nfs_fh file;
- sattr attributes;
- };
-
- /*
- * Arguments for directory operations
- */
- struct diropargs {
- nfs_fh dir; /* directory file handle */
- filename name; /* name (up to NFS_MAXNAMLEN bytes) */
- };
-
- struct diropokres {
- nfs_fh file;
- fattr attributes;
- };
-
- /*
- * Results from directory operation
- */
- union diropres switch (nfsstat status) {
- case NFS_OK:
- diropokres diropres;
- default:
- void;
- };
-
- union readlinkres switch (nfsstat status) {
- case NFS_OK:
- nfspath data;
- default:
- void;
- };
-
- /*
- * Arguments to remote read
- */
- struct readargs {
- nfs_fh file; /* handle for file */
- unsigned offset; /* byte offset in file */
- unsigned count; /* immediate read count */
- unsigned totalcount; /* total read count (from this offset)*/
- };
-
- /*
- * Status OK portion of remote read reply
- */
- struct readokres {
- fattr attributes; /* attributes, need for pagin*/
- opaque data<NFS_MAXDATA>;
- };
-
- union readres switch (nfsstat status) {
- case NFS_OK:
- readokres reply;
- default:
- void;
- };
-
- /*
- * Arguments to remote write
- */
- struct writeargs {
- nfs_fh file; /* handle for file */
- unsigned beginoffset; /* beginning byte offset in file */
- unsigned offset; /* current byte offset in file */
- unsigned totalcount; /* total write count (to this offset)*/
- opaque data<NFS_MAXDATA>;
- };
-
- struct createargs {
- diropargs where;
- sattr attributes;
- };
-
- struct renameargs {
- diropargs from;
- diropargs to;
- };
-
- struct linkargs {
- nfs_fh from;
- diropargs to;
- };
-
- struct symlinkargs {
- diropargs from;
- nfspath to;
- sattr attributes;
- };
-
-
- typedef opaque nfscookie[NFS_COOKIESIZE];
-
- /*
- * Arguments to readdir
- */
- struct readdirargs {
- nfs_fh dir; /* directory handle */
- nfscookie cookie;
- unsigned count; /* number of directory bytes to read */
- };
-
- struct entry {
- unsigned fileid;
- filename name;
- nfscookie cookie;
- entry *nextentry;
- };
-
- struct dirlist {
- entry *entries;
- bool eof;
- };
-
- union readdirres switch (nfsstat status) {
- case NFS_OK:
- dirlist reply;
- default:
- void;
- };
-
- struct statfsokres {
- unsigned tsize; /* preferred transfer size in bytes */
- unsigned bsize; /* fundamental file system block size */
- unsigned blocks; /* total blocks in file system */
- unsigned bfree; /* free blocks in fs */
- unsigned bavail; /* free blocks avail to non-superuser */
- };
-
- union statfsres switch (nfsstat status) {
- case NFS_OK:
- statfsokres reply;
- default:
- void;
- };
-
- /*
- * Remote file service routines
- */
- program NFS_PROGRAM {
- version NFS_VERSION {
- void
- NFSPROC_NULL(void) = 0;
-
- attrstat
- NFSPROC_GETATTR(nfs_fh) = 1;
-
- attrstat
- NFSPROC_SETATTR(sattrargs) = 2;
-
- void
- NFSPROC_ROOT(void) = 3;
-
- diropres
- NFSPROC_LOOKUP(diropargs) = 4;
-
- readlinkres
- NFSPROC_READLINK(nfs_fh) = 5;
-
- readres
- NFSPROC_READ(readargs) = 6;
-
- void
- NFSPROC_WRITECACHE(void) = 7;
-
- attrstat
- NFSPROC_WRITE(writeargs) = 8;
-
- diropres
- NFSPROC_CREATE(createargs) = 9;
-
- nfsstat
- NFSPROC_REMOVE(diropargs) = 10;
-
- nfsstat
- NFSPROC_RENAME(renameargs) = 11;
-
- nfsstat
- NFSPROC_LINK(linkargs) = 12;
-
- nfsstat
- NFSPROC_SYMLINK(symlinkargs) = 13;
-
- diropres
- NFSPROC_MKDIR(createargs) = 14;
-
- nfsstat
- NFSPROC_RMDIR(diropargs) = 15;
-
- readdirres
- NFSPROC_READDIR(readdirargs) = 16;
-
- statfsres
- NFSPROC_STATFS(nfs_fh) = 17;
- } = 2;
- } = 100003;
-
- Funky_Stuff
- len=`wc -c < nfs_prot.x`
- if [ $len != 7684 ] ; then
- echo error: nfs_prot.x was $len bytes long, should have been 7684
- fi
- echo x - nlm_prot.x
- cat > nlm_prot.x <<'Funky_Stuff'
- /* @(#)nlm_prot.x 1.2 87/11/12 3.9 RPCSRC */
- /* @(#)nlm_prot.x 1.8 87/09/21 Copyr 1987 Sun Micro */
-
- /*
- * Network lock manager protocol definition
- * Copyright (C) 1986 Sun Microsystems, Inc.
- *
- * protocol used between local lock manager and remote lock manager
- */
-
- #ifdef RPC_HDR
- %#define LM_MAXSTRLEN 1024
- %#define MAXNAMELEN LM_MAXSTRLEN+1
- #endif
-
- /*
- * status of a call to the lock manager
- */
- enum nlm_stats {
- nlm_granted = 0,
- nlm_denied = 1,
- nlm_denied_nolocks = 2,
- nlm_blocked = 3,
- nlm_denied_grace_period = 4
- };
-
- struct nlm_holder {
- bool exclusive;
- int svid;
- netobj oh;
- unsigned l_offset;
- unsigned l_len;
- };
-
- union nlm_testrply switch (nlm_stats stat) {
- case nlm_denied:
- struct nlm_holder holder;
- default:
- void;
- };
-
- struct nlm_stat {
- nlm_stats stat;
- };
-
- struct nlm_res {
- netobj cookie;
- nlm_stat stat;
- };
-
- struct nlm_testres {
- netobj cookie;
- nlm_testrply stat;
- };
-
- struct nlm_lock {
- string caller_name<LM_MAXSTRLEN>;
- netobj fh; /* identify a file */
- netobj oh; /* identify owner of a lock */
- int svid; /* generated from pid for svid */
- unsigned l_offset;
- unsigned l_len;
- };
-
- struct nlm_lockargs {
- netobj cookie;
- bool block;
- bool exclusive;
- struct nlm_lock alock;
- bool reclaim; /* used for recovering locks */
- int state; /* specify local status monitor state */
- };
-
- struct nlm_cancargs {
- netobj cookie;
- bool block;
- bool exclusive;
- struct nlm_lock alock;
- };
-
- struct nlm_testargs {
- netobj cookie;
- bool exclusive;
- struct nlm_lock alock;
- };
-
- struct nlm_unlockargs {
- netobj cookie;
- struct nlm_lock alock;
- };
-
-
- #ifdef RPC_HDR
- %/*
- % * The following enums are actually bit encoded for efficient
- % * boolean algebra.... DON'T change them.....
- % */
- #endif
- enum fsh_mode {
- fsm_DN = 0, /* deny none */
- fsm_DR = 1, /* deny read */
- fsm_DW = 2, /* deny write */
- fsm_DRW = 3 /* deny read/write */
- };
-
- enum fsh_access {
- fsa_NONE = 0, /* for completeness */
- fsa_R = 1, /* read only */
- fsa_W = 2, /* write only */
- fsa_RW = 3 /* read/write */
- };
-
- struct nlm_share {
- string caller_name<LM_MAXSTRLEN>;
- netobj fh;
- netobj oh;
- fsh_mode mode;
- fsh_access access;
- };
-
- struct nlm_shareargs {
- netobj cookie;
- nlm_share share;
- bool reclaim;
- };
-
- struct nlm_shareres {
- netobj cookie;
- nlm_stats stat;
- int sequence;
- };
-
- struct nlm_notify {
- string name<MAXNAMELEN>;
- long state;
- };
-
- /*
- * Over-the-wire protocol used between the network lock managers
- */
-
- program NLM_PROG {
- version NLM_VERS {
-
- nlm_testres NLM_TEST(struct nlm_testargs) = 1;
-
- nlm_res NLM_LOCK(struct nlm_lockargs) = 2;
-
- nlm_res NLM_CANCEL(struct nlm_cancargs) = 3;
- nlm_res NLM_UNLOCK(struct nlm_unlockargs) = 4;
-
- /*
- * remote lock manager call-back to grant lock
- */
- nlm_res NLM_GRANTED(struct nlm_testargs)= 5;
- /*
- * message passing style of requesting lock
- */
- void NLM_TEST_MSG(struct nlm_testargs) = 6;
- void NLM_LOCK_MSG(struct nlm_lockargs) = 7;
- void NLM_CANCEL_MSG(struct nlm_cancargs) =8;
- void NLM_UNLOCK_MSG(struct nlm_unlockargs) = 9;
- void NLM_GRANTED_MSG(struct nlm_testargs) = 10;
- void NLM_TEST_RES(nlm_testres) = 11;
- void NLM_LOCK_RES(nlm_res) = 12;
- void NLM_CANCEL_RES(nlm_res) = 13;
- void NLM_UNLOCK_RES(nlm_res) = 14;
- void NLM_GRANTED_RES(nlm_res) = 15;
- } = 1;
-
- version NLM_VERSX {
- nlm_shareres NLM_SHARE(nlm_shareargs) = 20;
- nlm_shareres NLM_UNSHARE(nlm_shareargs) = 21;
- nlm_res NLM_NM_LOCK(nlm_lockargs) = 22;
- void NLM_FREE_ALL(nlm_notify) = 23;
- } = 3;
-
- } = 100021;
-
- Funky_Stuff
- len=`wc -c < nlm_prot.x`
- if [ $len != 3476 ] ; then
- echo error: nlm_prot.x was $len bytes long, should have been 3476
- fi
- echo x - rex.x
- cat > rex.x <<'Funky_Stuff'
- /* @(#)rex.x 1.2 87/11/12 3.9 RPCSRC */
- /* @(#)rex.x 1.3 87/09/18 Copyr 1987 Sun Micro */
-
- /*
- * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
- * unrestricted use provided that this legend is included on all tape
- * media and as a part of the software program in whole or part. Users
- * may copy or modify Sun RPC without charge, but are not authorized
- * to license or distribute it to anyone else except as part of a product or
- * program developed by the user.
- *
- * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
- * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun RPC is provided with no support and without any obligation on the
- * part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California 94043
- */
-
- /*
- * Remote execution (rex) protocol specification
- */
-
- const STRINGSIZE = 1024;
- typedef string rexstring<1024>;
-
- /*
- * values to pass to REXPROC_SIGNAL
- */
- const SIGINT = 2; /* interrupt */
-
- /*
- * Values for rst_flags, below
- */
- const REX_INTERACTIVE = 1; /* interactive mode */
-
- struct rex_start {
- rexstring rst_cmd<>; /* list of command and args */
- rexstring rst_host; /* working directory host name */
- rexstring rst_fsname; /* working directory file system name */
- rexstring rst_dirwithin;/* working directory within file system */
- rexstring rst_env<>; /* list of environment */
- unsigned int rst_port0; /* port for stdin */
- unsigned int rst_port1; /* port for stdout */
- unsigned int rst_port2; /* port for stderr */
- unsigned int rst_flags; /* options - see const above */
- };
-
- struct rex_result {
- int rlt_stat; /* integer status code */
- rexstring rlt_message; /* string message for human consumption */
- };
-
-
- struct sgttyb {
- unsigned four; /* always equals 4 */
- opaque chars[4];
- /* chars[0] == input speed */
- /* chars[1] == output speed */
- /* chars[2] == kill character */
- /* chars[3] == erase character */
- unsigned flags;
- };
- /* values for speeds above (baud rates) */
- const B0 = 0;
- const B50 = 1;
- const B75 = 2;
- const B110 = 3;
- const B134 = 4;
- const B150 = 5;
- const B200 = 6;
- const B300 = 7;
- const B600 = 8;
- const B1200 = 9;
- const B1800 = 10;
- const B2400 = 11;
- const B4800 = 12;
- const B9600 = 13;
- const B19200 = 14;
- const B38400 = 15;
-
- /* values for flags above */
- const TANDEM = 0x00000001; /* send stopc on out q full */
- const CBREAK = 0x00000002; /* half-cooked mode */
- const LCASE = 0x00000004; /* simulate lower case */
- const ECHO = 0x00000008; /* echo input */
- const CRMOD = 0x00000010; /* map \r to \r\n on output */
- const RAW = 0x00000020; /* no i/o processing */
- const ODDP = 0x00000040; /* get/send odd parity */
- const EVENP = 0x00000080; /* get/send even parity */
- const ANYP = 0x000000c0; /* get any parity/send none */
- const NLDELAY = 0x00000300; /* \n delay */
- const NL0 = 0x00000000;
- const NL1 = 0x00000100; /* tty 37 */
- const NL2 = 0x00000200; /* vt05 */
- const NL3 = 0x00000300;
- const TBDELAY = 0x00000c00; /* horizontal tab delay */
- const TAB0 = 0x00000000;
- const TAB1 = 0x00000400; /* tty 37 */
- const TAB2 = 0x00000800;
- const XTABS = 0x00000c00; /* expand tabs on output */
- const CRDELAY = 0x00003000; /* \r delay */
- const CR0 = 0x00000000;
- const CR1 = 0x00001000; /* tn 300 */
- const CR2 = 0x00002000; /* tty 37 */
- const CR3 = 0x00003000; /* concept 100 */
- const VTDELAY = 0x00004000; /* vertical tab delay */
- const FF0 = 0x00000000;
- const FF1 = 0x00004000; /* tty 37 */
- const BSDELAY = 0x00008000; /* \b delay */
- const BS0 = 0x00000000;
- const BS1 = 0x00008000;
- const CRTBS = 0x00010000; /* do backspacing for crt */
- const PRTERA = 0x00020000; /* \ ... / erase */
- const CRTERA = 0x00040000; /* " \b " to wipe out char */
- const TILDE = 0x00080000; /* hazeltine tilde kludge */
- const MDMBUF = 0x00100000; /* start/stop output on carrier intr */
- const LITOUT = 0x00200000; /* literal output */
- const TOSTOP = 0x00400000; /* SIGTTOU on background output */
- const FLUSHO = 0x00800000; /* flush output to terminal */
- const NOHANG = 0x01000000; /* no SIGHUP on carrier drop */
- const L001000 = 0x02000000;
- const CRTKIL = 0x04000000; /* kill line with " \b " */
- const PASS8 = 0x08000000;
- const CTLECH = 0x10000000; /* echo control chars as ^X */
- const PENDIN = 0x20000000; /* tp->t_rawq needs reread */
- const DECCTQ = 0x40000000; /* only ^Q starts after ^S */
- const NOFLSH = 0x80000000; /* no output flush on signal */
-
- struct tchars {
- unsigned six; /* always equals 6 */
- opaque chars[6];
- /* chars[0] == interrupt char */
- /* chars[1] == quit char */
- /* chars[2] == start output char */
- /* chars[3] == stop output char */
- /* chars[4] == end-of-file char */
- /* chars[5] == input delimeter (like nl) */
- };
-
- struct ltchars {
- unsigned six; /* always equals 6 */
- opaque chars[6];
- /* chars[0] == stop process signal */
- /* chars[1] == delayed stop process signal */
- /* chars[2] == reprint line */
- /* chars[3] == flush output */
- /* chars[4] == word erase */
- /* chars[5] == literal next character */
- unsigned mode;
- };
-
- struct rex_ttysize {
- int ts_lines;
- int ts_cols;
- };
-
- struct rex_ttymode {
- sgttyb basic; /* standard unix tty flags */
- tchars more; /* interrupt, kill characters, etc. */
- ltchars yetmore; /* special Berkeley characters */
- unsigned andmore; /* and Berkeley modes */
- };
-
- /* values for andmore above */
- const LCRTBS = 0x0001; /* do backspacing for crt */
- const LPRTERA = 0x0002; /* \ ... / erase */
- const LCRTERA = 0x0004; /* " \b " to wipe out char */
- const LTILDE = 0x0008; /* hazeltine tilde kludge */
- const LMDMBUF = 0x0010; /* start/stop output on carrier intr */
- const LLITOUT = 0x0020; /* literal output */
- const LTOSTOP = 0x0040; /* SIGTTOU on background output */
- const LFLUSHO = 0x0080; /* flush output to terminal */
- const LNOHANG = 0x0100; /* no SIGHUP on carrier drop */
- const LL001000 = 0x0200;
- const LCRTKIL = 0x0400; /* kill line with " \b " */
- const LPASS8 = 0x0800;
- const LCTLECH = 0x1000; /* echo control chars as ^X */
- const LPENDIN = 0x2000; /* needs reread */
- const LDECCTQ = 0x4000; /* only ^Q starts after ^S */
- const LNOFLSH = 0x8000; /* no output flush on signal */
-
- program REXPROG {
- version REXVERS {
-
- /*
- * Start remote execution
- */
- rex_result
- REXPROC_START(rex_start) = 1;
-
- /*
- * Wait for remote execution to terminate
- */
- rex_result
- REXPROC_WAIT(void) = 2;
-
- /*
- * Send tty modes
- */
- void
- REXPROC_MODES(rex_ttymode) = 3;
-
- /*
- * Send window size change
- */
- void
- REXPROC_WINCH(rex_ttysize) = 4;
-
- /*
- * Send other signal
- */
- void
- REXPROC_SIGNAL(int) = 5;
- } = 1;
- } = 100017;
- Funky_Stuff
- len=`wc -c < rex.x`
- if [ $len != 7115 ] ; then
- echo error: rex.x was $len bytes long, should have been 7115
- fi
- echo x - rnusers.x
- cat > rnusers.x <<'Funky_Stuff'
- /* @(#)rnusers.x 1.2 87/11/12 3.9 RPCSRC */
- /* @(#)rnusers.x 1.2 87/09/20 Copyr 1987 Sun Micro */
-
- /*
- * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
- * unrestricted use provided that this legend is included on all tape
- * media and as a part of the software program in whole or part. Users
- * may copy or modify Sun RPC without charge, but are not authorized
- * to license or distribute it to anyone else except as part of a product or
- * program developed by the user.
- *
- * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
- * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun RPC is provided with no support and without any obligation on the
- * part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California 94043
- */
-
- /*
- * Find out about remote users
- */
-
- const MAXUSERS = 100;
- const MAXUTLEN = 256;
-
- struct utmp {
- string ut_line<MAXUTLEN>;
- string ut_name<MAXUTLEN>;
- string ut_host<MAXUTLEN>;
- int ut_time;
- };
-
-
- struct utmpidle {
- utmp ui_utmp;
- unsigned int ui_idle;
- };
-
- typedef utmp utmparr<MAXUSERS>;
-
- typedef utmpidle utmpidlearr<MAXUSERS>;
-
- program RUSERSPROG {
- /*
- * Includes idle information
- */
- version RUSERSVERS_IDLE {
- int
- RUSERSPROC_NUM(void) = 1;
-
- utmpidlearr
- RUSERSPROC_NAMES(void) = 2;
-
- utmpidlearr
- RUSERSPROC_ALLNAMES(void) = 3;
- } = 1;
-
- /*
- * Old version does not include idle information
- */
- version RUSERSVERS_ORIG {
- int
- RUSERSPROC_NUM(void) = 1;
-
- utmparr
- RUSERSPROC_NAMES(void) = 2;
-
- utmparr
- RUSERSPROC_ALLNAMES(void) = 3;
- } = 2;
- } = 100002;
-
- Funky_Stuff
- len=`wc -c < rnusers.x`
- if [ $len != 2151 ] ; then
- echo error: rnusers.x was $len bytes long, should have been 2151
- fi
- echo x - rquota.x
- cat > rquota.x <<'Funky_Stuff'
- /* @(#)rquota.x 1.2 87/11/12 3.9 RPCSRC */
- /* @(#)rquota.x 1.2 87/09/20 Copyr 1987 Sun Micro */
-
- /*
- * Remote quota protocol
- * Requires unix authentication
- */
-
- const RQ_PATHLEN = 1024;
-
- struct getquota_args {
- string gqa_pathp<RQ_PATHLEN>; /* path to filesystem of interest */
- int gqa_uid; /* inquire about quota for uid */
- };
-
- /*
- * remote quota structure
- */
- struct rquota {
- int rq_bsize; /* block size for block counts */
- bool rq_active; /* indicates whether quota is active */
- unsigned int rq_bhardlimit; /* absolute limit on disk blks alloc */
- unsigned int rq_bsoftlimit; /* preferred limit on disk blks */
- unsigned int rq_curblocks; /* current block count */
- unsigned int rq_fhardlimit; /* absolute limit on allocated files */
- unsigned int rq_fsoftlimit; /* preferred file limit */
- unsigned int rq_curfiles; /* current # allocated files */
- unsigned int rq_btimeleft; /* time left for excessive disk use */
- unsigned int rq_ftimeleft; /* time left for excessive files */
- };
-
- enum gqr_status {
- Q_OK = 1, /* quota returned */
- Q_NOQUOTA = 2, /* noquota for uid */
- Q_EPERM = 3 /* no permission to access quota */
- };
-
- union getquota_rslt switch (gqr_status status) {
- case Q_OK:
- rquota gqr_rquota; /* valid if status == Q_OK */
- case Q_NOQUOTA:
- void;
- case Q_EPERM:
- void;
- };
-
- program RQUOTAPROG {
- version RQUOTAVERS {
- /*
- * Get all quotas
- */
- getquota_rslt
- RQUOTAPROC_GETQUOTA(getquota_args) = 1;
-
- /*
- * Get active quotas only
- */
- getquota_rslt
- RQUOTAPROC_GETACTIVEQUOTA(getquota_args) = 2;
- } = 1;
- } = 11;
- Funky_Stuff
- len=`wc -c < rquota.x`
- if [ $len != 1565 ] ; then
- echo error: rquota.x was $len bytes long, should have been 1565
- fi
- echo x - rstat.x
- cd ..
- echo more files to follow
- exit
-